IDA Pro:Reverse D3D11 Present function using IDA Pro
Вероятность извлечения анимации из Героев 5 - мала (они то извлекаются, но нужна функция для их воспроизведения - не понятно какой формат этих анимаций, а также скелета)... Но если можно хотя бы задавать вручную в функцию воспроизведения анимации свои комманды по аналогии с Юнити3д: допустим я выбрал Архангела, появился список анимаций. И при помощи ИДЫ ПРО задать какую анимацию играть из списка - а не только ту что выбрана, и не только один раз, а зациклить... И вообще - проиграть её в окне моей программы, и вообще - управлять этой анимацией полностью самому - назависимо от основной программы Героев 5 (или редактора карт)... Вобщем - поэтому вот такая тема: https://www.unknowncheats.me/wiki/IDA_Pro:Reverse_D3D11_Present_function_using_IDA_Pro by evolution536 Before you start Start IDA Pro, and click "Open a new file or database". A new window opens up where you can select an executable file. Browse to the directory of your DirectX 11 game and open the game executable. In a few seconds the following screen should pop up. IDAFirstWindow.png Make sure the PE Executable, which is the first one in this case, is selected and click OK. The executable will now be disassembled. This can take a few minutes but can also take up to an hour, depending on the executable size and complexity and the speed of your computer. When it is done, select a debugger in the combobox at the top. Click it and select "Local Win32 Debugger". IDASelectDebugger.PNG When you selected the debugger, click the green play button to start debugging the game. A window with a warning will now pop up. Just ignore that message and click Yes. When the game started press Alt+TAB and go back to the IDA Pro window. Now you should see the "Module List" somewhere in your IDA Pro window. If you don't see it, click the menu: Debugger->Debugger windows->Module list. In the module list, scroll until you find the module: dxgi.dll. Right click it and click "Load debug symbols", like shown in the picture below. IDAModuleList.png After you clicked that button, nothing should happen, visible to the eye. Now double-click the dxgi.dll module. Usually the DLL should open using the symbols found. Now click the column header of Name to sort the modules. We have to search for the Present function. Start typing: "?Present". If everything went well you should now have at least one Present function visible. Note that you probably see more than one. The following picture describes what you should see now. IDAdxgiModule.png You will probably see a few functions with the name Present. You should start with the function as described in the picture above. The red-marked one is most probably the correct one. Note the Address of that function. We are now going to use the calculator. I will use my address as referrence, but you will need to use the value displayed on your screen ofcourse. Note the address of the Present function, and go back to the Module list. Also note the address of the dxgi.dll module. Now Substract the address of dxgi.dll from the address of the Present function, like this: 70A31D0D - 70A10000 = 21D0D In my situation, the offset of the Present function is 21D0D, which can be used in your cheat to identify the Present function for a hook. You have succesfully found the offset of the Present function. Now use it in your cheat using the following C++ code. typedef HRESULT (__stdcall *D3D11PresentHook) (IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags); D3D11Present pD3D11Present = NULL; DWORD hDxgi = NULL; while (!hDxgi) { hDxgi = (DWORD)GetModuleHandle("dxgi.dll"); Sleep(250); } // Where hookD3D11Present The function you defined that will be executed when the hook catches a Present call, // and DetourFunc A detour function of your choice. You can use Microsoft Detours but you can also use the // manual way, like I did. Refer to the forum for more information about this. pD3D11Present = (D3D11Present)DetourFunc((PBYTE)(hDxgi + 0x21D0D), (PBYTE)hookD3D11Present); This was the tutorial about reversing the Present function in IDA Pro. I hope you enjoyed it and understood it. If you still run into problems, refer to the forum, where more information is available and questions can be asked. Microsoft Detour Library 3.0: Download : Media: http://research.microsoft.com/en-us/projects/detours/ How to Install: Open CMD: 1. type cd C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC (I have Win7 x64 | VS2012) 2. type vcvarsall.bat 3. type cd C:\Program Files (x86)\Microsoft Research\Detours Express 3.0 4. type nmake Wait until this is over, and then just include the include and the lib.X86 in your project. Usage: #include #pragma comment(lib, "detours.lib") DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((PVOID*)&pD3D11Present, hookD3D11Present); DetourTransactionCommit(); - Ну вот. Всё вроде хорошо. Но что потом делать с этим Си/++? Ну будет у меня, допустим эта мини-программка для внедрения/хукинга в какой-то DLL, но что реально можно будет запрограммировать на уровне Си/++? Вот если бы С# - это ещё как-то... Хотя. Разница то не такая большая. Можно и к Си/++ привыкнуть... Да, есть даже написанные на Си-шарпе хукинг-программки. Надо пробовать скачивать, устанавливать... И у них такие нюансы - надо запускать Visual Studio (C#/++) - оттуда компилировать (а может и не получиться :-( )... А потом надоедает - и всё берешь и вытираешь ... А потом опять проходит какое-то время - может быть год, несколько лет - и опять к этому возвращаешься... "Самсара" какая-то... А может ну это всё? Может быть лучше сделать уж философскую игру, философский квест?